home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
SNIP1292.ARJ
/
NORESET.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-11-22
|
3KB
|
104 lines
/* code to disable <Ctrl><Alt><Del>. */
/* Compiled and tested under TC++ and MSC 6 */
#include <dos.h>
#include <conio.h>
#if defined(__TURBOC__)
#define _interrupt interrupt
#define _far far
#else /* i.e. if MSC */
#define inportb(port) inp(port)
#define outportb(port,val) outp(port,val)
#define enable() _enable()
#define disable() _disable()
#define getvect(int) _dos_getvect(int)
#define setvect(int,ptr) _dos_setvect(int,ptr)
unsigned char peekb(unsigned seg, unsigned ofs)
{
unsigned char far *ptr;
FP_SEG(ptr) = seg;
FP_OFF(ptr) = ofs;
return *ptr;
}
#endif
#define CTRLALT (0x08|0x04) /* bit flags set in kbstat() */
#define DELSCAN 0x53 /* keyboard scan code for <Del> */
#define KEYPORT 0x60 /* keyboard scan code port */
#define CONTROLLERPORT 0x20 /* interrupt controller port */
#define kbstat() peekb(0,0x417) /* BIOS data area - kb flags */
#define keyport() inportb(KEYPORT)
/* macro that returns the scancode of the key that caused */
/* the interrupt */
#define install() (oldkbisr=getvect(0x09),setvect(0x09,newkbisr))
/* installation macro, installs newkbisr() in the keyboard */
/* interrupt chain */
#define uninstall() setvect(0x09,oldkbisr)
/* removal macro, call to remove newkbisr() from interrupt */
/* chain. oldkbisr() must be removed before program ends */
void (_interrupt _far * oldkbisr)(void);
/* address of old keyboard ISR */
void _interrupt _far newkbisr(void)
{
if((keyport()==DELSCAN)&&((kbstat()&CTRLALT)==CTRLALT))
{
char kbin = (char)inportb(KEYPORT+1); /* reset keyboard */
outportb(KEYPORT+1, kbin|0x80);
outportb(KEYPORT+1, kbin);
disable();
outportb(CONTROLLERPORT,0x20); /* tell controller to shut up */
enable();
}
else
oldkbisr(); /* chain to old keyboard isr */
}
#ifdef TEST
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <signal.h>
#include <errno.h>
void main(void)
{
int ch = 0;
void cleanup(void), cbrk(int);
install();
atexit(cleanup);
signal(SIGINT, cbrk);
puts("This is a test of Ctrl-Alt-Del disabling.");
puts("Press any key, but only Esc should stop this program.");
while (0x1b != ch)
{
if (kbhit)
ch = getch();
}
}
void cbrk(int sig)
{
signal(SIGINT, SIG_IGN);
signal(SIGINT, cbrk);
}
void cleanup(void)
{
uninstall();
}
#endif